package main

//高阶函数
import "fmt"

func sayHello(name string) {
	fmt.Printf("hello,%s", name)
}

func f1(name string, f func(string)) {
	f(name)
}

func main() {
	//函数作为参数
	f1("test", sayHello)

	//--函数作为返回值
	add := cal("+")
	r := add(1, 2)
	fmt.Printf("r: %v\n", r)

	sub := cal("-")
	j := sub(9, 1)
	fmt.Printf("j------ %v\n", j)
}

func add(x, y int) int {
	return x + y
}

func sub(x, y int) int {
	return x - y
}

func cal(s string) func(int, int) int {
	switch s {
	case "+":
		return add
	case "-":
		return sub
	default:
		return nil
	}
}
